/*采用localeCompare先对汉字进行排序，然后选出395个拼音在最前面的汉字作为关键字，然后用二分法查找，多音字转换及少数汉字可能会出现错误
 * */
var hzkey = [ "阿", "哎", "安", "肮", "凹", "八", "掰", "扳", "邦", "包", "杯", "奔", "崩", "逼", "边", "标", "瘪", "宾", "冰", "拨", "补", "擦", "猜", "参", "仓",
		"操", "册", "噌", "叉", "拆", "搀", "昌", "抄", "车", "抻", "称", "吃", "冲", "抽", "出", "揣", "川", "创", "吹", "春", "戳", "刺", "匆", "凑", "粗", "崔",
		"村", "搓", "搭", "呆", "丹", "当", "刀", "德", "灯", "低", "掂", "刁", "爹", "丁", "丢", "东", "都", "嘟", "端", "堆", "吨", "多", "讹", "恩", "儿", "发",
		"帆", "方", "飞", "分", "丰", "佛", "夫", "旮", "该", "干", "冈", "皋", "戈", "给", "根", "更", "工", "勾", "估", "瓜", "乖", "关", "光", "归", "滚",
		"锅", "哈", "还", "鼾", "夯", "蒿", "喝", "黑", "痕", "亨", "轰", "侯", "乎", "华", "怀", "欢", "荒", "灰", "婚", "豁", "几", "加", "戋", "江", "交", "节",
		"巾", "茎", "迥", "纠", "拘", "捐", "决", "军", "咖", "开", "刊", "康", "考", "坷", "肯", "坑", "空", "抠", "枯", "夸", "脍", "宽", "匡", "亏", "坤", "括",
		"垃", "来", "兰", "啷", "捞", "勒", "勒", "塄", "哩", "连", "良", "俩", "撩", "咧", "拎", "伶", "溜", "龙", "搂", "撸", "峦", "抡", "罗", "驴", "妈", "埋",
		"蛮", "芒", "猫", "么", "没", "闷", "蒙", "咪", "眠", "喵", "咩", "民", "名", "谬", "末", "末", "哞", "拿", "乃", "男", "囊", "孬", "讷", "馁", "能", "妮",
		"拈", "娘", "鸟", "涅", "恁", "您", "宁", "妞", "农", "奴", "暖", "疟", "挪", "女", "噢", "讴", "趴", "拍", "潘", "乓", "抛", "呸", "喷", "抨", "丕", "片",
		"剽", "撇", "拚", "乒", "坡", "剖", "仆", "七", "掐", "千", "呛", "悄", "切", "钦", "青", "穷", "丘", "区", "圈", "鹊", "裙", "髯", "嚷", "饶", "惹", "人",
		"扔", "日", "戎", "柔", "如", "阮", "蕊", "闰", "若", "仨", "腮", "三", "丧", "搔", "色", "森", "僧", "杀", "筛", "山", "伤", "捎", "奢", "申", "升", "尸",
		"收", "书", "刷", "衰", "闩", "双", "谁", "谁", "吮", "说", "私", "忪", "搜", "苏", "狻", "虽", "孙", "唆", "他", "台", "坍", "汤", "涛", "忒", "疼", "体",
		"天", "佻", "帖", "厅", "通", "偷", "凸", "湍", "推", "吞", "氽", "托", "挖", "歪", "弯", "亡", "危", "温", "翁", "挝", "乌", "夕", "虾", "仙", "乡", "肖",
		"些", "心", "兴", "凶", "休", "吁", "轩", "削", "勋", "丫", "咽", "央", "幺", "耶", "一", "因", "应", "哟", "佣", "优", "迂", "鸳", "曰", "晕", "拶", "灾",
		"簪", "赃", "遭", "则", "贼", "怎", "增", "扎", "斋", "占", "张", "钊", "折", "贞", "正", "之", "中", "舟", "朱", "抓", "拽", "专", "妆", "椎", "肫", "拙",
		"孜", "宗", "邹", "租", "钻", "嘴", "尊", "作"

];
var pinyin = [ "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin",
		"bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen",
		"cheng", "chi", "chong", "chou", "chu", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cui",
		"cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du",
		"duan", "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fu", "ga", "gai", "gan",
		"gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", "hai",
		"han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji",
		"jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan", "kang",
		"kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang",
		"lao", "le", "lei", "leng", "li", "lian", "liang", "lia", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun",
		"luo", "lv", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu",
		"mo", "mo", "mou", "na", "nai", "nan", "nang", "nao", "ne", "nei", "neng", "ni", "nian", "niang", "niao", "nie", "nen", "nin",
		"ning", "niu", "nong", "nu", "nuan", "nve", "nuo", "nv", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi",
		"pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong",
		"qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", "run",
		"ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", "sheng",
		"shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shei", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui",
		"sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan",
		"tui", "tun", "cuan", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao",
		"xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo",
		"yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan",
		"zhang", "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo",
		"zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo" ];
/*
 * 用二分法递归查找汉字所在的拼音
 */
function walk(begin, end, hz) {
	var middle = Math.floor((begin + end) / 2);
	var compResult = hz.localeCompare(hzkey[middle]);
	// 要比较的汉字恰好等于关键字或者只剩下一行
	if (compResult == 0 || begin == end) {
		return pinyin[middle];
	}
	// 只剩下两行比较
	if (begin + 1 == end) {
		if (hz.localeCompare(hzkey[end]) < 0) {// 要比较的汉字比后一行关键字小
			return pinyin[begin];
		} else {
			return pinyin[end];
		}
	}
	// 递归
	if (compResult < 0) {// 要比较的汉字比middle行关键字 小
		return walk(begin, middle - 1, hz);
	} else {// 要比较的汉字比middle行关键字大
		return walk(middle, end, hz);
	}
}
/*
 * 多个汉字连续转换，不是汉字则转换成小写保留
 */
function spell(content) {
	var pyhead = [];
	var py = [];
	var ch;
	var onePY = "";
	for (var i = 0, n = content.length; i < n; i++) {
		ch = content.charAt(i);
		if (ch == "行") {
			onePY = "hang";// 此项目中大多数时间“行”是指银行，所以不用fn()转换成xing,而转换为hang
		} else {
			onePY = (ch < "一" || ch > "龥") ? ch.toLowerCase() : walk(0, 395, ch); // 保留：转换
		}
		py.push(onePY);
		pyhead.push(onePY.substring(0, 1));
	}
	var retObject = new Object();
	retObject.pinyin = py.join("");
	retObject.head = pyhead.join("");
	return retObject;
}
function indexSpell(context,inputValue){
	var inputPattern = /^[A-Za-z]/;// 检测输入值是否拼音(对拼音汉字混合输入不考虑，全lowerCase后直接indexOf处理)
	var allPinyin = inputPattern.test(inputValue);
	if (allPinyin) {
		var optionPinyin = spell(context.text);
		// 1、输入值是拼音且待选值拼音包含此输入值
		// 2、输入值是拼音且待选值汉字首字母串包含此输入值
		return optionPinyin.head.indexOf(inputValue) >= 0 || optionPinyin.pinyin.indexOf(inputValue) >= 0;
	}else{
		return context.indexOf(inputValue);
	}
}